package com.glr.dictionary.controller;

import com.glr.common.contants.CodeEnum;
import com.glr.common.utils.ResultUtils;
import com.glr.dictionary.entity.DictEntity;
import com.glr.dictionary.service.DictService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;

/**
 * 数据字典控制层
 *
 * @author GLoRy
 * @date 2021/6/1 14:53
 */
@RestController("dictController")
@RequestMapping("/dict")
public class DictController {

    @Autowired
    private DictService dictService;

    /**
     * 添加字典数据
     *
     * @param dictEntity 字典实体
     * @return 添加结果
     */
    @PostMapping("/insertDict")
    public ResultUtils insertDict(@RequestBody DictEntity dictEntity) {
        dictService.insertDict(dictEntity);
        return new ResultUtils(true, CodeEnum.SUCCEED, "添加字典数据成功");
    }

    /**
     * 修改字典数据
     *
     * @param dictEntity 字典实体
     * @param id         字典id
     * @return 修改结果
     */
    @PutMapping("/updateDict/{id}")
    public ResultUtils updateDict(@RequestBody DictEntity dictEntity, @PathVariable String id) {
        dictEntity.setDictId(Integer.valueOf(id));
        dictService.updateDict(dictEntity);
        return new ResultUtils(true, CodeEnum.SUCCEED, "修改字典数据成功");
    }

    /**
     * 删除字典数据
     *
     * @param id 字典id
     * @return 删除结果
     */
    @DeleteMapping("/deleteDict/{id}")
    public ResultUtils deleteDict(@PathVariable String id) {
        dictService.deleteDict(Integer.valueOf(id));
        return new ResultUtils(true, CodeEnum.SUCCEED, "删除字典数据成功");
    }

    /**
     * 查询所有根节点数据
     *
     * @return 查询结果
     */
    @GetMapping("/findAllRoot")
    public ResultUtils findAllRoot() {
        return new ResultUtils(true, CodeEnum.SUCCEED, "查询所有字典数据", dictService.findAllRoot());
    }

    /**
     * 分页查询所有根节点数据
     *
     * @param page     当前页
     * @param pageSize 每页条数
     * @return 所有数据分页结果
     */
    @GetMapping("/findByPage/{page}/{pageSize}")
    public ResultUtils findByPage(@PathVariable String page, @PathVariable String pageSize) {
        Page<DictEntity> dictEntities = dictService.findByPage(Integer.valueOf(page), Integer.valueOf(pageSize));
        return new ResultUtils(true, CodeEnum.SUCCEED, "所有字典分页数据", dictEntities);
    }

    /**
     * 根据父节点查询对应的子节点数据
     *
     * @param id 父节点id
     * @return 子节点查询结果
     */
    @GetMapping("/findSonByRoot/{id}")
    public ResultUtils findSonByRoot(@PathVariable String id) {
        return new ResultUtils(true, CodeEnum.SUCCEED, "子节点字典数据", dictService.findSonByRoot(Integer.valueOf(id)));
    }

    /**
     * 根据类型查询出对应所有节点
     *
     * @param dataType 数据类型
     * @return 所有节点查询结果
     */
    @GetMapping("/findAllByType/{dataType}")
    public ResultUtils findAllByType(@PathVariable String dataType) {
        return new ResultUtils(true, CodeEnum.SUCCEED, "对应类型节点数据", dictService.findAllByType(Integer.valueOf(dataType)));
    }

    /**
     * 根据数据类型分页查询所有节点
     *
     * @param dataType 数据类型
     * @param page     当前页
     * @param pageSize 每页条数
     * @return 所有节点分页查询结果
     */
    @GetMapping("/findByTypePage/{dataType}/{page}/{pageSize}")
    public ResultUtils findByTypePage(@PathVariable String dataType, @PathVariable String page, @PathVariable String pageSize) {
        Page<DictEntity> dictEntities = dictService.findByTypePage(Integer.valueOf(dataType), Integer.valueOf(page), Integer.valueOf(pageSize));
        return new ResultUtils(true, CodeEnum.SUCCEED, "分页查询对应类型节点数据", dictEntities);
    }
}
